Wybrany wykres znajduje się na stronie Forsal dostępnej pod linkiem: https://forsal.pl/artykuly/1461198,koronawirus-w-polsce-przyrost-zakazen-koronawirusem-w-polsce-aktualny-wykres.html.
Na wykresie przedstawiona jest liczba przebadanych próbek do liczby nowych przypadków. Wykres jednak nie jest do końca czytelny. Co prawda po najechaniu na wykres mamy pokazane dokładne dane, jednak na pierwszy rzut oka dwie osie OY nie są najlepszym wyborem jeśli mówimy o czytelności wykresu. Odtwarzając ten wykres zdecydowałem się do skorzystania również z biblioteki plotly, oprócz ggplot2, która obowiązkowo miała być użyta do tej pracy domowej. Dlaczego skorzystałem z biblioteki plotly? Chciałem uzyskać opcję pojawiajacego sie okienka po “najechaniu” na wykres na którym wyświetla nam się dokładna data i wartość. Wykres, który poprawiałem miał taką własność, więc i tutaj zdecydowałem się ją dodać. Aby zwiększyć czytelność wykresu stworzyłem subplot, gdyż liczba nowych przypadków była znacznie większa od liczby przebadanych próbek. Były na to jeszcze dwa rozwiązania: pierwsze - wygenerowanie po prostu dwóch wykresów na jeden układ współrzędnych, jednak wtedy jeden wykres nakładał się praktycznie na oś OX, z faktu ze po prostu miał za małe wartości porównując do skali, która była generowana tak, aby również móc naszkicować wykres o tych znacznie większych wartościach, drugie - stworzyć dwie osi OY na których różniłyby sie znacznie wartości(na jednej byłyby one kilkukrotnie większe niż na drugiej) i wtedy możnaby było przedstawic na jednym układzie współrzednych dwa wykresy i żaden nie byłby spłaszczony, poprzez rożnice rzędu wartości dla tych dwóch wykresów. Jednak, czy te rozwiązania byłyby dobrym wyborem?. Stwierdziłem, że jednak lepiej stworzyc subplot i na kazdym w wykresów oddzielnie przedstawić zależność badanej zmiennej od czasu. Dzięki temu nie musimy nakładać dodatkowej osi OY i możemy wartości odczytywać zarówno z osi jak i najeżdżając na wykres i patrząc na pojawiające sie okienko, które oferuje nam pakiet plotly. Dodatkowo używajac tego pakietu uzyskujemy możliwość przybliżania wykresu dzięki czemu możemy dokładniej przebadać wykres, jego zmienność względem daty. Ostatnia rzecz czym mój wykres różni się od tego poprawianego. Tam na osi OX podziałka jest bardzo dokładna, jednak czy aby napewno jest to niezbędne? Osobiście uważam, że nie jest ona niezbędna i tylko rozprasza uwagę - za dużo wartości skumulowanych w jednym miejscu. Za opcję bardziej czytelną uznałem tą zastosowaną w moim wykresie.
Jedyne co może być tu nierozumiałe i czego nie poznaliśmy jeszcze nigdy na zajęciach to ten fragment
tbl <-
list.files(path = "./danehistorycznewojewodztwa/",
pattern = "*.csv",
full.names = T) %>%
map_df(~read.csv(., sep = ";"))
wczytuję tutaj prawie 300 plików o rozszerzeniu .csv i łączę w jeden dataframe (Muszę tak zrobić gdyż moje dane pochodzące ze źródła: https://www.gov.pl/web/koronawirus/wykaz-zarazen-koronawirusem-sars-cov-2, w jednym pliku csv przedstawiają statystyki dla tylko jednego, konkretnego dnia)
library(dplyr)
library(ggplot2)
library(hrbrthemes)
library(plotly)
library(purrr)
tbl <-
list.files(path = "./danehistorycznewojewodztwa/",
pattern = "*.csv",
full.names = T) %>%
map_df(~read.csv(., sep = ";"))
df_covid <- tbl %>% filter(wojewodztwo == "Cały kraj" & !is.na(stan_rekordu_na))
df_covid$stan_rekordu_na <- as.Date(df_covid$stan_rekordu_na)
options(scipen = 100)
ostatnia_doba <- df_covid %>%
tail(1) %>%
select("liczba_przypadkow", "stan_rekordu_na")
nowe_przypadki <- ggplot(df_covid) +
geom_line(aes(x = stan_rekordu_na, y = liczba_przypadkow),
color = "black",
size = 0.6) +
geom_area(aes(x = stan_rekordu_na, y = liczba_przypadkow),
fill="#fd8d3c",
alpha=0.4) +
theme_ipsum()
nowe_przypadki <- ggplotly(nowe_przypadki)
nowe_przypadki <- nowe_przypadki %>%
add_annotations(x = ostatnia_doba[, 2],
y = 30000,
text = paste0("Nowe przypadki w ostatniej dobie ",
ostatnia_doba[, 1]),
font = list(color = "red"),
showarrow = TRUE
) %>%
layout( plot_bgcolor='#e5ecf6',
xaxis = list(
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff',
title =list(text="Dzień",
font = list(size = 15,
family="Arial",
color = "#e6550d"),
standoff = 3)
),
yaxis = list(
title=list(text="Nowe przypadki",
font = list(size = 15,
family="Arial",
color = "#e6550d"), standoff = 25),
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff'))
dzienna_liczba_przebadanych_probek <- ggplot(df_covid) +
geom_line(aes(x = stan_rekordu_na, y = liczba_wykonanych_testow),
color = "black",
size = 0.6) +
geom_area(aes(x = stan_rekordu_na, y = liczba_wykonanych_testow),
fill = "lightblue",
alpha = 0.8)
dzienna_liczba_przebadanych_probek <- ggplotly(dzienna_liczba_przebadanych_probek)
dzienna_liczba_przebadanych_probek <- dzienna_liczba_przebadanych_probek %>%
layout(plot_bgcolor='#e5ecf6',
xaxis = list(
zerolinecolor = '#ffff',
zerolinewidth = 1,
gridcolor = 'ffff',
title=list(text="Dzień",
font = list(size = 15,
family="Arial",
color = "#3182bd"),
standoff = 3)
),
yaxis = list(
title=list(text="Przebadane próbki",
font = list(size = 15,
family="Arial",
color = "#3182bd"),
standoff = 25),
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff'))
together <- subplot(nowe_przypadki, dzienna_liczba_przebadanych_probek,
nrows = 2,
margin = 0.06,
titleX = TRUE,
titleY = TRUE) %>%
layout(title = "Sytuacja covid w Polsce",
font = list(size = 13,
family = "Arial"))
together
który zdecydowałem się poprawić, również z serwisu Forsal, link: https://forsal.pl/artykuly/1461198,koronawirus-w-polsce-przyrost-zakazen-koronawirusem-w-polsce-aktualny-wykres.html. Wrzuciłem poprawione dwa wykresy, gdyż nie wiedziałem czy tamten pierwszy nie będzie uznany za zbyt prosty(tylko dwa parametry)
df_covid <- df_covid %>% filter(stan_rekordu_na > as.Date('2021-01-31'))
#inicjowanie aby na stan 1 lutego dane sie zgadzaly
#tzncz zeby liczba ozdrowiencow i liczba przypadkow pokrywala sie z danymi na wykresie, gdyz uwzgledniaja one juz ilosci ktore wystapily do 1 lutego moja ramka pokazuje jednak tylko ile w kazdym dniu i nie uwzglednia ilosci zachorowan i uzddrowiencow od początku pandemii
df_covid[1,2] <- 1527016
df_covid[1,15] <- 1283698
df_covid$liczba_przypadkow <- cumsum(df_covid$liczba_przypadkow)
df_covid$liczba_wykonanych_testow <- cumsum(df_covid$liczba_wykonanych_testow)
df_covid$liczba_ozdrowiencow <- cumsum(df_covid$liczba_ozdrowiencow)
df_covid$zgony <- cumsum(df_covid$zgony)
chart1 <- ggplot(df_covid) +
geom_line(aes(x = stan_rekordu_na, y = liczba_przypadkow),
color = "#fb6a4a",
size = 0.4)+
geom_area(aes(x = stan_rekordu_na, y = liczba_przypadkow),
fill = "#fb6a4a")+
geom_line(aes(x = stan_rekordu_na, y = liczba_ozdrowiencow),
color = "#fcbba1",
size = 0.4) +
geom_area(aes(x = stan_rekordu_na, y = liczba_ozdrowiencow),
fill="#fcbba1",
alpha = 0.5) +
theme_ipsum()
chart1 <- ggplotly(chart1)
chart1 <- chart1 %>% layout( plot_bgcolor='#e5ecf6',
xaxis = list(
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff',
title=list(text="Dzień",
font = list(size = 10,
family="Arial",
color = "#fb6a4a"),
standoff = 1)
),
yaxis = list(
title=list(text="nowe przypadki/ozdrowieńcy",font = list(size = 13, family="Arial", color = "#fb6a4a"), standoff = 25),
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff'))
chart2 <- ggplot(df_covid) +
geom_line(aes(x = stan_rekordu_na, y = zgony),
color = "black",
size = 0.6) +
geom_area(aes(x = stan_rekordu_na, y = zgony),
fill="#756bb1",
alpha=0.8) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 3))+
theme_ipsum()
chart2 <- ggplotly(chart2)
chart2 <- chart2 %>%
layout( plot_bgcolor='#e5ecf6',
xaxis = list(
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff',
title=list(text="Dzień",
font = list(size = 10, family="Arial", color = "#756bb1"),
standoff = 1)
),
yaxis = list(
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff',
title=list(text="zgony",
font = list(size = 15,
family="Arial",
color = "#756bb1"),
standoff = 25)))
chart3 <- ggplot(df_covid) +
geom_line(aes(x = stan_rekordu_na, y = liczba_wykonanych_testow),
color = "black",
size = 0.6) +
geom_area(aes(x = stan_rekordu_na, y = liczba_wykonanych_testow),
fill="#54278f",
alpha=0.8) +
theme_ipsum()
chart3 <- ggplotly(chart3)
chart3 <- chart3 %>% layout( plot_bgcolor='#e5ecf6',
xaxis = list(
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff',
title=list(text="Dzień",
font = list(size = 10,
family="Arial",
color = "#54278f"),
standoff = 1)
),
yaxis = list(
title=list(text="liczba testow",
font = list(size = 15, family="Arial",
color = "#54278f"),
standoff = 25),
zerolinecolor = '#ffff',
zerolinewidth = 2,
gridcolor = 'ffff'))
together2 <- subplot(chart1,
chart2,
chart3,
nrows = 3,
margin = 0.05,
titleX = TRUE,
titleY = TRUE) %>%
layout(title = "Sytuacja covid w Polsce",
font = list(size = 13,
family = "Arial"))
together2 %>% layout(annotations = list(
list(x = 0 ,
y = 1.05,
text = "nowe przypadki - kolor ciemniejszy, ozdrowieńcy - kolor jaśniejszy",
showarrow = F,
xref='paper',
yref='paper',
font = list(size = 10,
color = "#fb6a4a"))
))
Wykresy zostały poprawione, gdyż moim zdaniem podwójna oś OY na każdym z nim nie była do końca czytelna i zniekształcała obraz przedstawianych danych.Wykresy zostały rozbite na subplot gdyż łatwiej wtedy przeanalizować zmienność każdego parametru i nie wprowadza to “poczucia chaosu”. Oś OX została również zmieniona, gdyż tak gęste wartości mogą tylko rozpraszać odbiorcę, natomiast okienko uzyskane dzieki pakietowi plotly jest czytelne i mozemy w prosty sposob odczytać dokładne wartości dla każdego z poczególnych dni.